package wizard;

import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

/**
 * Fenetre du plugin de conception de nouveaux plugins
 * @author KROMMENHOEK Cedric
 *
 */
@SuppressWarnings("serial")
public class FenetreConcepteur extends JFrame implements ActionListener {

	/**
	 * Le plugin de conception.
	 */
	private Concepteur concepteur;
	
	/**
	 * Panneau de l'IHM.
	 */
	private JPanel panneau;
	
	/**
	 * Le champ du nom du nouveau plugin.
	 */
	private JTextField champNom;
	
	/**
	 * Le champ du nom de package du nouveau plugin.
	 */
	private JTextField champPackage;
	
	/**
	 * Le champ de la categorie du nouveau plugin.
	 */
	private JTextField champCategorie;
	
	/**
	 * Le champ de la description du nouveau plugin.
	 */
	private JTextField champDescription;
	
	/**
	 * Le champ de choix de l'interface du nouveau plugin.
	 */
	private JComboBox champTypePlugin;
	
	/**
	 * Constructeur.
	 * @param concepteur le plugin de conception
	 */
	public FenetreConcepteur(Concepteur concepteur) {
		this.concepteur = concepteur;
		
		this.initFenetre();
		this.initPanneau();
		this.initChampsDonnees();
		this.setContentPane(this.panneau);
	}
	
	/**
	 * Methode d'initialisation de la fenetre.
	 */
	private void initFenetre() {
		this.setTitle("Conception d'un nouveau plugin");
		this.setSize(500, 300);
		this.setResizable(true);
		this.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
		this.setLocationRelativeTo(null);
	}
	
	/**
	 * Methode d'initialisation du panneau.
	 */
	private void initPanneau() {
		this.panneau = new JPanel();
		this.panneau.setLayout(new GridLayout(6, 1));
	}
	
	/**
	 * Methode d'initialisation des champs de donnees.
	 */
	private void initChampsDonnees() {
		this.initChampNom();
		this.initChampPackage();
		this.initChampCategorie();
		this.initChampDescription();
		this.initChampTypePlugin();
		this.initBouton();
	}
	
	/**
	 * Methode d'initialisation du champ de nom.
	 */
	private void initChampNom() {
		JPanel p = new JPanel();
		JLabel label = new JLabel("nom du plugin : ");
		p.add(label);
		this.champNom = new JTextField();
		this.champNom.setPreferredSize(new Dimension(330, 30));
		p.add(this.champNom);
		this.panneau.add(p);
	}
	
	/**
	 * Methode d'initialisation du champ de nom de package.
	 */
	private void initChampPackage() {
		JPanel p = new JPanel();
		JLabel label = new JLabel("nom du package : ");
		p.add(label);
		this.champPackage = new JTextField();
		this.champPackage.setPreferredSize(new Dimension(320, 30));
		p.add(this.champPackage);
		this.panneau.add(p);
	}
	
	/**
	 * Methode d'initialisation du champ de categorie.
	 */
	private void initChampCategorie() {
		JPanel p = new JPanel();
		JLabel label = new JLabel("categorie du plugin : ");
		p.add(label);
		this.champCategorie = new JTextField();
		this.champCategorie.setPreferredSize(new Dimension(300, 30));
		p.add(this.champCategorie);
		this.panneau.add(p);
	}
	
	/**
	 * Methode d'initialisation du champ de description.
	 */
	private void initChampDescription() {
		JPanel p = new JPanel();
		JLabel label = new JLabel("description : ");
		p.add(label);
		this.champDescription = new JTextField();
		this.champDescription.setPreferredSize(new Dimension(350, 30));
		p.add(this.champDescription);
		this.panneau.add(p);
	}
	
	/**
	 * Methode d'initialisation du champ de type.
	 */
	private void initChampTypePlugin() {
		JPanel p = new JPanel();
		JLabel label = new JLabel("type de plugin : ");
		p.add(label);
		String[] listeTypesPlugin = {"plugin d'entree", "plugin de sortie", "plugin transformateur"};
		this.champTypePlugin = new JComboBox(listeTypesPlugin);
		p.add(this.champTypePlugin);
		this.panneau.add(p);		
	}
	
	/**
	 * Methode d'initialisation du bouton de validation.
	 */
	private void initBouton() {
		JButton bouton = new JButton("Valider");
		bouton.addActionListener(this);
		this.panneau.add(bouton);
	}
	
	/**
	 * Acces au nom.
	 * @return le nom
	 */
	public String getNom() {
		return this.champNom.getText();
	}
	
	/**
	 * Acces au nom du package.
	 * @return le nom du package
	 */
	public String getPackage() {
		return this.champPackage.getText();
	}
	
	/**
	 * Acces a la categorie.
	 * @return la categorie
	 */
	public String getCategorie() {
		return this.champCategorie.getText();
	}
	
	/**
	 * Acces a la description.
	 * @return la description
	 */
	public String getDescription() {
		return this.champDescription.getText();
	}
	
	/**
	 * Acces au type de plugin.
	 * @return le type du plugin
	 */
	public String getTypePlugin() {
		String type = this.champTypePlugin.getSelectedItem().toString();
		if (type.equals("plugin d'entree")) {
			return "entree";
		} else if (type.equals("plugin de sortie")) {
			return "sortie";
		} else {
			return "transformateur";
		}
	}

	/**
	 * Definition de l'action. 
	 */
	public void actionPerformed(ActionEvent arg0) {
		if (this.concepteur.valider()) {
			this.setVisible(false);
		}
	}
	
}
